import request from './auth'

/**
 * 获取用户的地址列表
 * @returns {Promise}
 */
export function getAddressList() {
    return request({
        url: '/user/address/list',
        method: 'get'
    }).then(res => {
        console.log('地址列表原始响应:', res)

        // 处理不同的响应格式情况
        let addressData = [];

        if (res.data !== undefined) {
            // 标准格式：{ code: 1, data: [...] }
            addressData = res.data;
            console.log('从res.data获取地址列表:', addressData);
        } else if (res.code === 1 && Array.isArray(res.data)) {
            // 直接返回数组格式：{ code: 1, data: [...] }
            addressData = res.data;
            console.log('从res.data数组获取地址列表:', addressData);
        } else if (Array.isArray(res)) {
            // 直接返回数组
            addressData = res;
            console.log('res本身是数组，直接使用:', addressData);
        } else {
            console.warn('未识别的地址列表响应格式:', res);
        }

        console.log('最终处理后的地址列表:', addressData);
        return addressData;
    }).catch(error => {
        console.error('获取地址列表发生错误:', error);
        return Promise.reject(error);
    })
}

/**
 * 新增地址
 * @param {Object} data - 地址信息
 * @returns {Promise}
 */
export function addAddress(data) {
    // 构造正确的请求数据格式
    const addressData = {
        consignee: data.consignee,
        phone: data.phone,
        detail: data.detail,
        label: data.label,
        isDefault: data.isDefault
    }

    console.log('添加地址请求数据:', addressData)

    return request({
        url: '/user/address',
        method: 'post',
        data: addressData
    }).then(res => {
        console.log('添加地址响应:', res)
        // 标准化返回格式
        const result = (res.data === undefined) ? res : res.data
        console.log('处理后的添加地址响应:', result)
        return result
    }).catch(error => {
        console.error('添加地址请求失败:', error)
        return Promise.reject(error)
    })
}

/**
 * 根据id获取地址信息
 * @param {Number} id - 地址ID
 * @returns {Promise}
 */
export function getAddressById(id) {
    return request({
        url: `/user/address/${id}`,
        method: 'get'
    }).then(res => (res.data === undefined) ? res : res.data)
}

/**
 * 修改地址信息
 * @param {Object} data - 地址信息
 * @returns {Promise}
 */
export function updateAddress(data) {
    // 构造正确的请求数据格式
    const addressData = {
        id: data.id,
        consignee: data.consignee,
        phone: data.phone,
        detail: data.detail,
        label: data.label,
        isDefault: data.isDefault
    }

    console.log('更新地址请求数据:', addressData)

    return request({
        url: '/user/address',
        method: 'put',
        data: addressData
    }).then(res => {
        console.log('更新地址响应:', res)
        return (res.data === undefined) ? res : res.data
    })
}

/**
 * 设置默认地址
 * @param {Object} data - 地址信息，至少包含id
 * @returns {Promise}
 */
export function setDefaultAddress(data) {
    // 构造带有isDefault字段的数据
    const addressData = {
        id: data.id,
        isDefault: 1
    }

    console.log('设置默认地址请求数据:', addressData)

    return request({
        url: '/user/address/default',
        method: 'put',
        data: addressData
    }).then(res => (res.data === undefined) ? res : res.data)
}

/**
 * 删除地址
 * @param {Number} id - 地址ID
 * @returns {Promise}
 */
export function deleteAddress(id) {
    return request({
        url: `/user/address/${id}`,
        method: 'delete'
    }).then(res => (res.data === undefined) ? res : res.data)
}

/**
 * 获取默认地址
 * @returns {Promise}
 */
export function getDefaultAddress() {
    return request({
        url: '/user/address/default',
        method: 'get'
    }).then(res => (res.data === undefined) ? res : res.data)
}